mixin A {
  String name = "张三";
  printA() {
    print('this is A');
  }
  run() {
    print('this is A run');
  }
}

mixin B {
  // ②作为被混入的类，不能有构造函数
  // B() {}
  printB() {
    print('this is B');
  }
  run() {
    print('this is B run');
  }
}

class D {
  String name = '张三';
  int age =  19;
  D(this.name, this.age);
  printD() {
    print('this is D');
  }
}

class E extends D {
  E(super.name, super.age);
  printE() {
    print('this is E');
  }
}

// ①E为继承类，不是Object类，所以会报错
// class C with A, B, E {
//
// }

// ③一个类可以混入多个类
class C extends D with A, B {
  C(super.name, super.age);

}
// ⑤ mixins不是继承，也不是接口，是一种全新的特性
void main () {
  C c = new C('张三', 18);
  c.printA();
  c.printB();
  print(c.name);
  c.run();
}